package com.southsmart.springboot.smartdoc.service;

import com.github.pagehelper.PageInfo;
import com.southsmart.springboot.smartdoc.dto.AdministrativeDivisionDTO;
import com.southsmart.springboot.smartdoc.dto.AdministrativeDivisionTreeDTO;
import com.southsmart.springboot.smartdoc.dto.AdministrativeLevelDTO;

import java.util.List;

/**
 * IAdministrativeDivisionService :  服务接口
 *
 * @author : CaoLongMin
 * @since 2021-04-20
 * @version 1.0
 */
public interface IAdministrativeDivisionService {

    /**
     * 分页查询
     *
     * @param pageNo 页数
     * @param pageSize 行数
     * @param administrativeDivisionDTO 检索对象
     * @return 结果对象
     */
    PageInfo<AdministrativeDivisionDTO> pageList(int pageNo, int pageSize, AdministrativeDivisionDTO administrativeDivisionDTO);

    /**
     * 根据id查询
     *
     * @param id 主键id
     * @return 结果对象
     */
    AdministrativeDivisionDTO selectById(String id);

    /**
     * 批量删除
     *
     * @param ids 主键id List
     * @return 删除条数
     */
    int deleteByIds(List<String> ids);

    /**
     * 插入数据
     *
     * @param administrativeDivisionDTO 插入数据对象
     * @return 是否成功
     */
    Boolean insert(AdministrativeDivisionDTO administrativeDivisionDTO);


    /**
     * 根据id修改数据
     *
     * @param administrativeDivisionDTO 修改数据对象
     * @return 是否成功
     */
    Boolean update(AdministrativeDivisionDTO administrativeDivisionDTO);

    /**
     * 获取所有行政区级别列表
     * @return
     */
    List<AdministrativeLevelDTO> getLevelList();

    /**
     * 验证行政区代码
     * @param code 行政区代码
     * @return 存在 返回true；不存在 返回false
     */
    Boolean validAdminCode(String code);

    /**
     * 获取行政区树形结构数据
     *
     * @param code 行政区代码 不传(null/"")则为全部 传则顶级节点为该级
     * @return 树结构数据
     */
    List<AdministrativeDivisionTreeDTO> getAdministrativeTreeByCode(String code);

    /**
     * 获取行政区树形结构数据
     *
     * @param levelType 行政区级别 不传(null/"")则为国家 传则顶级节点为该等级 0 国家；1省；2市；3区县
     * @return 树结构数据
     */
    List<AdministrativeDivisionTreeDTO> getAdministrativeTreeByLevel(Integer levelType);
}
